home *** CD-ROM | disk | FTP | other *** search
- IDT 'DFT'
- *
- * This program calculates a complex DFT.
- *
- * Standard straight DFT algorithm.
- * Uses table lookup of coefficients with table size N
- * for sines and cosines.
- * Maximum size of DFT is 64 points, complex.
- * Keeps a full 32-bit running sum.
- * All data begins in RAM and results are output
- * sequentially to port 0.
- *
- N EQU 64 * Size of the transform is N.
- *
- X EQU 0 * Data points are on page 0.
- * Rest of the variables are page 1 locations.
- ONE EQU 0 * Contains value 1
- K EQU 1 * Modulo counter, index into sine table
- J EQU 2 * Count of DFT point
- HOLDN EQU 3 * Contains value N
- QUARTN EQU 4 * Contains value N/4
- COS EQU 5 * Current cosine value
- SIN EQU 6 * Current sine value
- TABLE EQU 7 * Contains location of sine table
- SUMREH EQU 8 * Current real DFT summation high
- SUMREL EQU 9 * Current real DFT summation low
- SUMIMH EQU 10 * Current imaginary DFT summation high
- SUMIML EQU 11 * Current imaginary DFT summation high
- *
- AORG 0
- START LDPK 1
- LACK 1
- SACL ONE
- LT ONE
- MPYK SINE
- PAC
- SACL TABLE * Save sine table address
- LACK N
- SACL HOLDN * HOLDN = N
- LACK N/4
- SACL QUARTN * QUARTN = N/4
- ZAC
- SACL J * J = 0
- JLOOP LARK AR0,N-2
- LARK AR1,0
- LARP 1
- LAC *+,15
- SACH SUMREH * Sum real = X(0)
- SACL SUMREL
- LAC *+,15
- SACH SUMIMH * Sum imag = Y(0)
- SACL SUMIML
- ZAC
- SACL K * K = 0
- *
- ILOOP LARP 1
- LAC K
- ADD J
- SUB HOLDN * K = (K + J)mod N
- BGEZ GT2PI
- ADD HOLDN
- GT2PI SACL K * 0 <= K < 2PI
- ADD TABLE
- TBLR SIN * Get coefficients
- ADD QUARTN
- TBLR COS
- *
- * Main DFT calculations.
- *
- ZALH SUMREH ** Real **
- ADDS SUMREL
- LT COS
- MPY *+
- LTA SIN
- MPY *-
- APAC
- SACH SUMREH * Sum = sum + cos(k)*x(i) + sin(k)*y(i)
- SACL SUMREL
- ZALH SUMIMH ** Imaginary **
- ADDS SUMIML
- MPY *+
- SPAC
- LT COS
- MPY *+,AR0
- APAC
- SACH SUMIMH * Sum = sum + cos(k)*y(i) - sin(k)*x(i)
- SACL SUMIML
- BANZ ILOOP * Repeat for i = 2 to N
- *
- * Output DFT results.
- *
- OUT SUMREH,PA0 * Output real part
- OUT SUMIMH,PA0 * Output imaginary part
- LAC J
- ADD ONE * J = J + 1
- SACL J
- SUB HOLDN
- BLZ JLOOP * Repeat for J = 1 to N
- *
- * End of program.
- *
- STOP B STOP
- *
- * Sine and cosine tables (length N).
- *
- SINE EQU $
- DATA 0
- DATA 3211
- DATA 6392
- DATA 9511
- DATA 12539
- DATA 15446
- DATA 18204
- DATA 20787
- DATA 23169
- DATA 25329
- DATA 27244
- DATA 28897
- DATA 30272
- DATA 31356
- DATA 32137
- DATA 32609
- COSINE EQU $
- DATA 32767
- DATA 32609
- DATA 32137
- DATA 31356
- DATA 30272
- DATA 28897
- DATA 27244
- DATA 25329
- DATA 23169
- DATA 20787
- DATA 18204
- DATA 15446
- DATA 12539
- DATA 9511
- DATA 6392
- DATA 3211
- DATA 0
- DATA -3211
- DATA -6392
- DATA -9511
- DATA -12539
- DATA -15446
- DATA -18204
- DATA -20787
- DATA -23169
- DATA -25329
- DATA -27244
- DATA -28897
- DATA -30272
- DATA -31356
- DATA -32137
- DATA -32609
- DATA -32767
- DATA -32609
- DATA -32137
- DATA -31356
- DATA -30272
- DATA -28897
- DATA -27244
- DATA -25329
- DATA -23169
- DATA -20787
- DATA -18204
- DATA -15446
- DATA -12539
- DATA -9511
- DATA -6392
- DATA -3211
- DATA 0
- DATA 3211
- DATA 6392
- DATA 9511
- DATA 12539
- DATA 15446
- DATA 18204
- DATA 20787
- DATA 23169
- DATA 25329
- DATA 27244
- DATA 28897
- DATA 30272
- DATA 31356
- DATA 32137
- DATA 32609
- END